{{ $url := .Get "url" }}
{{ $type := .Get "type" }}
{{ $startLine := .Get "startLine" | default 1 | int }}
{{ $startLine = sub $startLine 1 }}
{{ $endLine := .Get "endLine" | default -1 | int }}
{{ $selectedLines := slice }}
{{ with resources.GetRemote (urls.Parse $url) }}
  {{ $lines := split .Content "\n" }}
  {{ $totalLine := $lines | len }}

  {{ if ne $endLine -1 }}
    {{ $endLine = math.Min $endLine $totalLine }}
  {{ else }}
    {{ $endLine = $totalLine }}
  {{ end }}

  {{ if gt $startLine $endLine }}
    {{ errorf "codeimporter shortcode: startLine is greater than endLine" . }}
  {{ end }}

  {{ $selectedLines := first $endLine $lines }}
  {{ $selectedLines = after $startLine $selectedLines }}
  {{ $codeBlock := printf "```%s\n%s\n```" $type (delimit $selectedLines "\n") }}
  {{ $codeBlock | markdownify }}
{{ else }}
  {{ warnf "codeimporter shortcode: unable to fetch %q: %s" $url .Position }}
{{ end }}
